热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

时分|纪念日_Java8时间和日期API

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java8时间和日期API相关的知识,希望对你有一定的参考价值。时间和日期API(记录下来当成字典查用了)

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java8时间和日期API相关的知识,希望对你有一定的参考价值。



时间和日期API(记录下来当成字典查用了)

旧版日期时间API存在的问题


  1. 设计很差:在java.util和java.sql的包中都有日期类,java.util.Date同时包含日期和时间,而java.sql.Date仅包含日期。此外用于格式化和解析的类在java.text包中定义。

  2. 非线程安全: java.util.Date是非线程安全的,所有的日期类都是可变的,这是Java日期类最大的问题之一。

  3. 时区处理麻烦:日期类并不提供国际化,没有时区支持,因此Java引入了java.util.Calendar和
    java.util.TimeZone类,但他们同样存在上述所有的问题。

新日期时间API介绍

JDK 8中增加了一套全新的日期时间API,这套API设计合理,是线程安全的。新的日期及时间API位于java.time包中,下面是一些关键类。

Loca1Date:表示日期,包含年月日,格式为2019-10-16
LocalTime:表示时间,包含时分秒,格式为16:38:54.158549300
LocalDateTime:表示日期时间,包含年月日,时分秒,格式为2018-09-06T15:33:56.750
DateTimeFormatter :日期时间格式化类。
lnstant:时间戳,表示—个特定的时间瞬间。
Duration:用于计算2个时间(LocalTime,时分秒)的距离Period:用于计算2个日期(LocalDate,年月日)的距离
ZonedDateTime:包含时区的时间

掌握JDK 8的日期和时间类

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class Test01
public static void main(String[] args)
//LocalDate 表示日期,不包含时分秒
LocalDate now = LocalDate.now();//获取当前日期,不用new
System.out.println(now);//2021-08-25
System.out.println(now.getYear());//2021
System.out.println(now.getMonthValue());//获取月
System.out.println(now.getDayOfMonth());//获取这个月的多少号
System.out.println(now.getDayOfWeek());//获取星期几
System.out.println(now.getDayOfYear());//获取是这一年的第几天,可以用来计算你和女朋友的纪念日
//LocalTime:表示时间,包含时分秒 毫秒
LocalTime localTime =LocalTime.now();
System.out.println(localTime);//14:15:26.262
System.out.println(localTime.getNano());//获取纳秒
//LocalDateTime:表示日期时间,包含上面两个
LocalDateTime dateTime = LocalDateTime.now();
System.out.println(dateTime);//2021-08-25T14:18:37.586
System.out.println(dateTime.withYear(2000));//2000-08-25T14:21:21.634 ,修改年
//增加plus或减少minus时间
System.out.println(dateTime.plusYears(6));//2027-08-25T14:22:42.672
System.out.println(dateTime.minusYears(6));//2015-08-25T14:23:34.188
/**
* 比较时间
* isAfter()
* isBefore()
* isEqual()
*/



掌握JDK8的时间格式化与解析

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Test02
public static void main(String[] args)
LocalDateTime dateTime = LocalDateTime.now();
System.out.println(dateTime);//2021-08-25T14:39:34.908
//JDK自带的格式
DateTimeFormatter isoDate = DateTimeFormatter.ISO_LOCAL_DATE;
System.out.println(dateTime.format(isoDate));//2021-08-25
//自定义格式
//1.定义自定义格式,
String format="yyyy年MM月dd日 HH:mm:ss";
//2.获得这个格式,
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
//3.格式化
String timeString = dateTime.format(dtf);
System.out.println(timeString);//2021年08月25日 14:43:41
//解析格式化的时间,反解析
LocalDateTime parse = LocalDateTime.parse(timeString,dtf);
System.out.println(parse);//2021-08-25T14:43:41


掌握JDK 8的Instant时间戳

instant内部保存了秒,一般不是给用户用的,而是方便我们程序做一些统计的

使用方法差不多,有加减、获取时分秒、毫秒、纳秒

了解JDK 8的计算日期时间差类

Duration、Period类。

package com.yong.time;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Period;
public class Test03
public static void main(String[] args)
LocalTime now = LocalTime.now();
LocalTime time = LocalTime.of(11, 20, 30);
//Duration计算时间的距离
Duration duration = Duration.between(time, now);
System.out.println(duration);
System.out.println("相差的天数"+duration.toDays());
System.out.println("相差的小时数"+duration.toHours());
System.out.println("相差的分钟数"+duration.toMinutes());
System.out.println("相差的毫秒数"+duration.toMillis());
//Period计算日期的距离,后面的减去前面的。
LocalDate now1 = LocalDate.now();
LocalDate date = LocalDate.of(11, 11, 11);
Period period = Period.between(date,now1);
System.out.println(period.getYears());
System.out.println(period.getMonths());
System.out.println(period.getDays());


了解JDK8设置日期时间的时区

Java8中加入了对时区的支持,LocalDate、LocalTime、LocalDateTime是不带时区的,带时区的日期时间类分别为: ZonedDate、ZonedTime、ZonedDateTime。

其中每个时区都对应着ID,ID的格式为“区域/城市”。例如:Asia/Shanghai 等。

zoneld:该类中包含了所有的时区信息。

import java.time.Clock;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Test04
public static void main(String[] args)
//获取所有时区
ZoneId.getAvailableZoneIds().forEach(System.out::println);
//获取不带时区的时间
LocalDateTime now = LocalDateTime.now();
System.out.println(now);//2021-08-25T15:22:27.004
//获取世界标准时间
ZonedDateTime dateTime = ZonedDateTime.now(Clock.systemUTC());
System.out.println(dateTime);//2021-08-25T07:26:43.917Z
//获取带时区的时间
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println(zonedDateTime);//2021-08-25T15:22:27.004+08:00[Asia/Shanghai]
// 上海的时间
// +08:00表示于标准的时间时间之差
//使用指定的时区 创建时间
ZonedDateTime time = ZonedDateTime.now(ZoneId.of("America/Vancouver"));//温哥华
System.out.println(time);//2021-08-25T00:25:01.018-07:00[America/Vancouver]



推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • 如何在Python中对时间进行转换
    这篇文章主要介绍了如何在Python中对时间进行转换,亿速云小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随亿速云小编来看看吧!Pytho ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
author-avatar
优优绿园之时尚饰品_834
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有